package com.xu.boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * 1.只要静态资源放在类路径下：/static (or /public or /resources or /META-INF/resources)
 * 访问：当前项目根路径/ + 静态资源名
 *
 * 2.原理：静态资源映射 /**
 * 当一个请求进来时，先去找 Controller 看能不能处理，不能处理的所有请求又都交给静态资源处理器，
 * 静态资源也找不到的话，就直接返回 404
 *
 * 3.静态资源访问前缀：默认无前缀，我们可以在 properties 或者 yaml 文件中配置 spring.mvc.static-path-pattern，
 * 这样的话，当前项目 + static-path-pattern + 静态资源名 = 静态资源文件夹下找。配置这个静态资源访问前缀是因为
 * 如果项目里面有拦截器，比如登录拦截器，他会拦截 /** 请求，而静态资源又不需要被拦截，所以可以给静态资源加一个
 * resources 的访问前缀，不对这个前缀的请求进行拦截
 *
 * 4.改变默认的静态资源路径：可以使用 spring.resources.static-locations 来指定静态资源路径，如果改变了静态资源的
 * 路径的话，将静态文件放在其它文件夹下就会不起作用。spring.resources.static-locations 默认有以下四种：
 *      4.1 classpath:/META-INF/resources/
 *      4.2 classpath:/resources/
 *      4.3 classpath:/static/
 *      4.4 classpath:/public/
 *
 * 5.欢迎页支持：有两种方式可以实现欢迎页
 *      静态资源路径下的 index.html，可以配置静态资源路径，但是不可以配置静态资源的访问前缀。否则导致 index.html不能被默认访问
 *      controller 能处理 /index
 */
@SpringBootApplication
public class Springboot03Application {

    public static void main(String[] args) {
        // 1. 返回我们的 IOC 容器
        ConfigurableApplicationContext run = SpringApplication.run(Springboot03Application.class, args);

        // 2. 查看容器里面的组件
        String[] names = run.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }
    }

}
